{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notes:\n",
    " * revised and tuned configuration, updated views\n",
    " * training on full dataset (including Y3, new light curves, fixes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/revised_tuned_33_run_1/1/AstroCNNModel_revised_tuned_20211220_011636',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_33_run_1/2/AstroCNNModel_revised_tuned_20211220_012051',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_33_run_1/3/AstroCNNModel_revised_tuned_20211220_012457',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_33_run_1/4/AstroCNNModel_revised_tuned_20211220_012903',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_33_run_1/5/AstroCNNModel_revised_tuned_20211220_013309',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_33_run_1/6/AstroCNNModel_revised_tuned_20211220_013716',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_33_run_1/7/AstroCNNModel_revised_tuned_20211220_014122',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_33_run_1/8/AstroCNNModel_revised_tuned_20211220_014529',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_33_run_1/9/AstroCNNModel_revised_tuned_20211220_014935',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_33_run_1/10/AstroCNNModel_revised_tuned_20211220_015341']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/revised_tuned_33_run_1'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-33-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v10-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "2487 records\n",
      "Running model 2\n",
      "2487 records\n",
      "Running model 3\n",
      "2487 records\n",
      "Running model 4\n",
      "2487 records\n",
      "Running model 5\n",
      "2487 records\n",
      "Running model 6\n",
      "2487 records\n",
      "Running model 7\n",
      "2487 records\n",
      "Running model 8\n",
      "2487 records\n",
      "Running model 9\n",
      "2487 records\n",
      "Running model 10\n",
      "2487 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('tic_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_e', 'disp_n', 'disp_j', 'disp_s', 'disp_b']\n",
    "\n",
    "col_e = labels.index('disp_e')\n",
    "thresh = 0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for tic_id in preds.index:\n",
    "        if tic_id not in agg_preds:\n",
    "            agg_preds[tic_id] = []\n",
    "\n",
    "        row = preds[preds.index == tic_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {tic_id}')\n",
    "        if pred_v[col_e] >= thresh:\n",
    "            agg_preds[tic_id].append('disp_e')\n",
    "        else:\n",
    "            masked_v = [v if i != col_e else 0 for i, v in enumerate(pred_v)]\n",
    "            agg_preds[tic_id].append(preds.columns[np.argmax(masked_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_preds = []\n",
    "for tic_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[tic_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'tic_id': tic_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('tic_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0).set_index('tic_id')\n",
    "for l in labels:\n",
    "    tce_table[l] = tce_table[l[:-1] + l[-1].upper()]\n",
    "tce_labels = tce_table[labels]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='tic_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.9806949806949807\n",
      "Precision: 0.7767584097859327\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_e_p'] > 0)\n",
    "pos = (pl['disp_e'] > 0)\n",
    "\n",
    "pneg = (pl['disp_e_p'] == 0)\n",
    "neg = (pl['disp_e'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "104485403\n",
      "369264198\n",
      "141753278\n",
      "158159741\n",
      "349412074\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "416282321\n",
      "43306175\n",
      "64418963\n",
      "136651206\n",
      "277848886\n",
      "417208086\n",
      "252588526\n",
      "431338538\n",
      "60959009\n",
      "192591652\n",
      "279064110\n",
      "381847922\n",
      "450006142\n",
      "127846210\n",
      "261814771\n",
      "269291226\n",
      "408945155\n",
      "428942240\n",
      "648359612\n",
      "82242456\n",
      "147607082\n",
      "356822358\n",
      "377253895\n",
      "405687343\n",
      "101496204\n",
      "238829802\n",
      "335588842\n",
      "36492008\n",
      "385229393\n",
      "842068824\n",
      "56861756\n",
      "91987762\n",
      "138847344\n",
      "150384768\n",
      "157272202\n",
      "154271808\n",
      "159636125\n",
      "219824182\n",
      "284266496\n",
      "298647682\n",
      "113496703\n",
      "118139893\n",
      "118398402\n",
      "161030195\n",
      "167039826\n",
      "201601338\n",
      "270312112\n",
      "276738707\n",
      "291374558\n",
      "30407196\n",
      "30722286\n",
      "309650507\n",
      "311103813\n",
      "31636802\n",
      "31868634\n",
      "319865847\n",
      "326693475\n",
      "373919592\n",
      "404851508\n",
      "404851552\n",
      "404851966\n",
      "40602499\n",
      "406091286\n",
      "410087746\n",
      "41256189\n",
      "419611478\n",
      "283330382\n",
      "375927073\n",
      "58685584\n",
      "14209654\n",
      "188258751\n",
      "199376584\n",
      "232524196\n"
     ]
    }
   ],
   "source": [
    "for i in pl[neg & ppos][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>158159741</th>\n",
       "      <td>0.000618</td>\n",
       "      <td>0.038545</td>\n",
       "      <td>0.984265</td>\n",
       "      <td>0.001608</td>\n",
       "      <td>0.024228</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158159741</th>\n",
       "      <td>0.003020</td>\n",
       "      <td>0.032704</td>\n",
       "      <td>0.981743</td>\n",
       "      <td>0.001663</td>\n",
       "      <td>0.067583</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158159741</th>\n",
       "      <td>0.000714</td>\n",
       "      <td>0.030499</td>\n",
       "      <td>0.986899</td>\n",
       "      <td>0.001303</td>\n",
       "      <td>0.038685</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158159741</th>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.039789</td>\n",
       "      <td>0.998627</td>\n",
       "      <td>0.000011</td>\n",
       "      <td>0.057322</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158159741</th>\n",
       "      <td>0.001939</td>\n",
       "      <td>0.129856</td>\n",
       "      <td>0.984648</td>\n",
       "      <td>0.000387</td>\n",
       "      <td>0.022331</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158159741</th>\n",
       "      <td>0.003052</td>\n",
       "      <td>0.060825</td>\n",
       "      <td>0.983187</td>\n",
       "      <td>0.001717</td>\n",
       "      <td>0.049248</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158159741</th>\n",
       "      <td>0.000390</td>\n",
       "      <td>0.023799</td>\n",
       "      <td>0.980674</td>\n",
       "      <td>0.003929</td>\n",
       "      <td>0.010235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158159741</th>\n",
       "      <td>0.004459</td>\n",
       "      <td>0.059670</td>\n",
       "      <td>0.968329</td>\n",
       "      <td>0.002577</td>\n",
       "      <td>0.048048</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158159741</th>\n",
       "      <td>0.000928</td>\n",
       "      <td>0.088869</td>\n",
       "      <td>0.988370</td>\n",
       "      <td>0.001071</td>\n",
       "      <td>0.029913</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158159741</th>\n",
       "      <td>0.000005</td>\n",
       "      <td>0.030676</td>\n",
       "      <td>0.998353</td>\n",
       "      <td>0.000134</td>\n",
       "      <td>0.008448</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             disp_e    disp_n    disp_j    disp_s    disp_b\n",
       "tic_id                                                     \n",
       "158159741  0.000618  0.038545  0.984265  0.001608  0.024228\n",
       "158159741  0.003020  0.032704  0.981743  0.001663  0.067583\n",
       "158159741  0.000714  0.030499  0.986899  0.001303  0.038685\n",
       "158159741  0.000027  0.039789  0.998627  0.000011  0.057322\n",
       "158159741  0.001939  0.129856  0.984648  0.000387  0.022331\n",
       "158159741  0.003052  0.060825  0.983187  0.001717  0.049248\n",
       "158159741  0.000390  0.023799  0.980674  0.003929  0.010235\n",
       "158159741  0.004459  0.059670  0.968329  0.002577  0.048048\n",
       "158159741  0.000928  0.088869  0.988370  0.001071  0.029913\n",
       "158159741  0.000005  0.030676  0.998353  0.000134  0.008448"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == 158159741)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e_p</th>\n",
       "      <th>disp_n_p</th>\n",
       "      <th>disp_j_p</th>\n",
       "      <th>disp_s_p</th>\n",
       "      <th>disp_b_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [disp_e_p, disp_n_p, disp_j_p, disp_s_p, disp_b_p, maxcount, disp_e, disp_n, disp_j, disp_s, disp_b]\n",
       "Index: []"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == 421845505]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "tics = set(ensemble_preds[0].index.values)\n",
    "\n",
    "tic_index = {v: i for i, v in enumerate(tics)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(tic_index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        tic, pred_e = row[0], row[1][col_e]\n",
    "        pred_es[i][tic_index[tic]] = pred_e\n",
    "\n",
    "lbl_es = np.zeros([len(tic_index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    tic, lbl_e = row[0], row[1]['disp_e']\n",
    "    if tic in tic_index:\n",
    "        lbl_es[tic_index[tic]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = float(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = int(np.sum(pred_pos))\n",
    "    num_true_pos = int(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.9771417706489333, max R: 1.0, max P: 1.0\n",
      "100% recall at: 19%, threshold: 0.003995827674920294\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs, ths = ([], [], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    if p > 0:\n",
    "        ps.append(p)\n",
    "        rs.append(r)\n",
    "    else:\n",
    "        ps.append(1.0)\n",
    "        rs.append(0.0)\n",
    "    ths.append(th)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "i = len(rs) - 1\n",
    "while rs[i] == 1.0:\n",
    "    i -= 1\n",
    "i += 1\n",
    "print(f'100% recall at: {int(ps[i] * 100)}%, threshold: {ths[i]}')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
